#ifndef APP_H
#define APP_H

/*****************************************************************
 *	App.h
 * 
 *  Descripcion: Clase singleton que se encarga de encapsular la
 *               aplicacion. 
 *****************************************************************/

#include <cstdlib> //para el NULL
#include <fstream>
#include <iostream>
#include <string>

#include "modelo.h"
#include "parser_parametros.h"
#include "logger.h"
#include "debugger.h"
#include "buffer.h"
#include "operacion.h"
#include "opFactory.h"



class App{
	
	private:
		static App* instancia;
		unsigned char segundos_espera;
		
		App();
		
		/*
		 * Defino constructor de copia privado para que no pueda ser usado
		 */
		App(const App &app){}
		
		/*
		 * Copia el archivo in al out del logger
		 */
		 void pasar_in_out(std::ifstream &archivo_in); 
	
	public:
	
		/*
		 * devuelve la instancia de la aplicacion
		 */
		static App* get_instance();
		
		/*
		 * Ejecuta la aplicacion actual, pasando por parametro los datos 
		 * necesarios para comenzar a correr un archivo.
		 */
		int ejecutar (int argc, char** argv);
		
		/*
		 * destructor de la instancia
		 */
		static void destroy();
		
		/*
		 * 	Devuelve los segundos de espera de la iteracion
		 */
		unsigned char get_segundos_espera(){
			return this->segundos_espera;	
		}
		
		/*
		 * 	Permite asignar los segundos de espera de la iteracion
		 */
		void set_segundos_espera(unsigned char s){
			this->segundos_espera= s;
		}

};

#endif /*APP_H*/
